package com.tjetc.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.*;
import java.util.Objects;
import java.util.Properties;

/**
 * 数据库连接池版的JDBCUtil工具类
 */
public final class JdbcUtil {
    private static final DataSource DATASOURCE;

    private JdbcUtil(){
        // 可能会发生
        throw new RuntimeException();
    }
    // 目的就是为了将配置文件加载进来，并获取properties对象
    static {
        try {
            Properties properties = new Properties();
            // 加载配置文件
            InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("druid.properties");
            properties.load(in);
            DATASOURCE = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            // 这种写法是编译异常转换成运行时异常
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取数据库连接对象
     * @return 数据库连接对象
     */
    public static Connection getConnection() throws SQLException {
        return DATASOURCE.getConnection();
    }

    /**
     * 关闭连接的相关资源
     * @param resultSet 结果集对象
     * @param statement 执行sql语句的对象
     * @param connection 连接数据库的对象
     */
    public static void close(ResultSet resultSet, Statement statement, Connection connection){

        try {
            // 判断是否打开连接
            if (Objects.nonNull(resultSet)) {
                resultSet.close();
            }
            if (Objects.nonNull(statement)) {
                statement.close();
            }
            if (Objects.nonNull(connection)) {
                connection.close();
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}
